<?php
/**
 * Partial que construye una tabla Datagrid a partir de un arreglo de objetos ActiveRecord
 * @author Robert Babilonia <bobbabilon2@gmail.com>
 * 
 *
 * @example Forma de llamar al partial datagrid CommanderView::partial('dataGrid',
 *  array('Model'=>$proyectos,
 *        'Campos'=>$campos,
 *        "model_id"=>"id",
 *        "haveActions"=>TRUE,
 *        "actions"=>array('R','E'),
 *        "validaciones"=>array("campo_valida"=>"estatus_proyecto_id", "value"=>array("3"), "other_actions"=>array('D')),
 * "tbl_id"=>"tbl_03" ,
 * "tiene_imagen"=>array("campo"=>"archivo","alt"=>"Imagen del modelo", "width"=>"40px","height"=>"40px" )
 * )));
 *
 * 
 *
 * Recibe en el array los siguientes parametros:
 *
 * Model: El array de objetos que contiene los registros obtenidos de la base de datos
 * Campos: El array asociativo contentivo de los atributos que serán tomados de los objetos
 * y que serán mostrados en la tabla, apareceran en el mismo orden en que se indiquen en el array
 *
 *
 * haveActions : Booleano que indica si el data grid va a mostrar o
 * no una columna de acciones para los registros
 *
 * NOTA: Si haveActions es TRUE, los siguientes parámetros son obligatorios
 * de lo contrario no son necesarios
 *
 *
 * model_id: String que indica la descripción o nombre del atributo
 * id que se desea tomar para realizar las acciones asociadas a un registro
 *
 * actions: Array que indica las distintas acciones que va mostrar el partial
 * Las acciones son:  E, permite editar o escribir un registro
 *                    D, Permite eliminar (delete) un registro
 *                    R, Permite ver detalles (Read) sobre un registro
 *                    O, Indica otra accion, permite agregar un icono de cualquier tipo
 *                    S, Indica segunda accion, permite agregar un icono de cualquier tipo
 *                    C, Indica que se van a activar campos checkbox
 *
 *  add_text : Indica el texto de ayuda que va a tener el icono add en caso de que esté activo
 *  other_class[0]: Indica la clase que tendrá el icono otros, en caso que este activo
 *  other_class[1]: Indica el titulo del icono otros
 *  other_second_class[0]: Indica la clase que tendrá el icono otros segundo, en caso que este activo
 *  other_second_class[1]: Indica el titulo del icono otros segundo
 *  tbl_id : es un id especifico para la tabla a generar, si se deja vacio el partial asignara uno automaticamente
 *
 *
 *   LAS VALIDACIONES NO SON OBLIGATORIAS, SON OPCIONALES
 *
 *  validaciones: Indica una serie de parametros que van a permitir agregar opciones en las acciones que no
 * estaran disponibles para los que no cumplan con esos parametros
 * P.E: "validaciones"=>array("campo_valida"=>"estatus_proyecto_id", "value"=>array("3"), "other_actions"=>array('D') )
 * Validaciones es un array que contiene:
 *      campo_valida: String con el nombre del atributo del objeto que debe ser verificado
 *      value: Valor o arrglo de valores que siendo id's son considerados que cumplen con la condicion
 *      other_acctions: caracteres o array de caracteres que indican las acciones a habilitar para los que cumplen con la condicion
 *
 *
 * tiene_imagen: Si está seteado indica que alguno de los campos de la tabla es una imagen o url de imagen
 * P.E: "tiene_imagen"=>array("campo"=>"archivo","alt"=>"Imagen del modelo", "width"=>"40px","height"=>"40px")
 * tiene_imagen Es un array que contiene:
 *
 *  campo: Es el campo que contiene el url a usar dentro del arreglo de objetos, debe estar especificado en el arreglo $campos
 * alt: String alt para el caso de que la imagen no se ubique
 * width: Ancho de la imagen en la tabla
 * height: alto de la imagen en la tabla
 *
 *
 * totales: Es el footer con la totalizacion de los campos de una tabla
 * row: es la posicion de la columna en la que va el valor
 * valor: campo con la informacion totalizada
 *
 */

?>

<div>

    <?php
    $in = 0;
    /**
     *
     * En esta  seccion se valida que la funcion suiche no sea redeclarada al
     * momento de generar mas de un data grid en una misma vista
     *
     */
    if ((!defined('testfunc_defined'))) {

        define('testfunc_defined', 1); // valida si la funcion existe para no redeclalarla nuevamente
        // sirve como validacion para cuando se agregan mas de un datagrid en una vista
        
        
        /**
         * De uso interno del partial, verifica el tipo de accion y genera el icono corespondiente para la tabla datagrid
         * @param string $action_val
         * @param Object $model
         * @param strinf $model_id
         * @param string $other_class
         * @param string $add_text
         * @param string $other_second_class
         * @param string $in
         */
        function suiche($action_val, $model, $model_id, $other_class="", $add_text="", $other_second_class="",$in) {

            switch ($action_val) {
                case "E":
                    ?>

                    <a class="iconEditBar" title="Editar este registro" id="<?php echo $model->$model_id ?>"></a>




                <?php
                break;
            case "D":

                ?>

                    <a class="iconDeleteBar" title="Eliminar este registro" id="<?php echo $model->$model_id ?>"></a>

                    <?php
                    break;
                default://por defectro se muestran acciones de solo lectura 'read'



                    if ($add_text != "") {

                        $tittle = $add_text;
                    } else {
                        $tittle = "Ver detalles";
                    }
                    ?>



                    <a class="iconAdd" title="<?php echo $tittle ?>" id="<?php echo $model->$model_id ?>"></a>

                <?php
                break;
            case 'O':

                ?>




                    <a class="<?php echo $other_class[0] ?>" title="<?php echo $other_class[1] ?>" id="<?php echo $model->$model_id ?>"></a>

                <?php
                break;

                case 'S':

                    ?>




                        <a class="<?php echo $other_second_class[0] ?>" title="<?php echo $other_second_class[1] ?>" id="<?php echo $model->$model_id ?>"></a>

                    <?php
                    break;

               case 'C':
                    ?>

                        <input type="checkbox" class="checkbox" name="opcion[<?php echo $in ?>]" value="<?php echo $model->$model_id ?>" id="<?php echo $model->$model_id ?>" title="Seleccionar este registro"/>



                    <?php
                    break;

        }
    }

}


if (!isset($tbl_id)) {

    $tbl_id = "datagrid";
}
?>

    <table id="<?php echo $tbl_id ?>"  width="100%" class="ajax">
        <thead>
            <tr>
                <?php foreach ($Campos as $titulo => $valor): ?>
                    <th> <?php echo $titulo ?></th>
                <?php
                endforeach;

                if ($haveActions) {
                    ?>

                    <th>Acciones</th>

                <?php
                }
                ?>
            </tr>
        </thead>
        <tfoot>

            <tr>
                <?php

                if(isset ($totales) &&  (count($totales)>0) ){

                    for ($i = 0; $i < count($Campos); $i++) {

                       if(isset ($totales[0]["align"])){

                           echo "<th class='".$totales[0]["align"]."'>";

                       }else{

                        echo "<th class='der'>";

                       }

                        foreach($totales as $campo){

                            if($i==$campo["row"]){

                                echo $campo["valor"];

                            }

                        }

                        echo "</th>";

                    }

                   if ($haveActions) {

                        echo "<th>";
                        echo "</th>";

                   }

                }

                ?>
            </tr>
        </tfoot>
        <tbody>
                <?php
                $in=0;
                if (!isset($add_text)) {

                    $add_text = "";
                }

                $rows_cont=0;//permite saber si el registro es par o impar
                foreach ($Model as $model):
                        
                    
                    if(($rows_cont++%2) >0 ){//impar
                        
                        $clase_tr="odd";
                        
                        
                    }else{//par
                        
                        $clase_tr="even";
                        
                    }
                    
                    ?>
            <tr class="<?php echo $clase_tr; ?>  trhover">

                        <?php
                        
                    foreach ($Campos as $campos):


                    if(isset ($tiene_imagen) && $campos==$tiene_imagen["campo"]){



                             ?>
                                <td>
                                    <a href="<?php echo URL_PATH.$model->$campos;?>" rel="lightbox" title="<?php echo $tiene_imagen["alt"];?>">
                            <?php
                            echo img_tag("title: ".$tiene_imagen["alt"], "alt: ".$tiene_imagen["alt"],"src: ".URL_PATH.$model->$campos,"width: ".$tiene_imagen["width"], "height: ".$tiene_imagen["height"]);
                             ?>
                                        </a>
                                </td>
                            <?php

                    }else{


                        if( (is_numeric(CommanderUtils::cambiar_formato(2,$model->$campos))) && ($campos=="precio"
                                || $campos=="monto" ) ) {

                                $alinea="class='der minimargin'";
                                $model->$campos=CommanderUtils::cambiar_formato(3,$model->$campos);

                            }else{

                                 $alinea="class='izq'";
                                $model->$campos=$model->$campos;

                            }

                            ?>

                        <td <?php echo $alinea; ?>>



                        <?php echo $model->$campos ?>

                        </td>

                        <?php


                    }



                            ?>
                    <?php
                endforeach;


                if ($haveActions) {
                    ?>



                <td class="cen">


        <?php
        foreach ($actions as $action) {



            if (isset($other_class)) {

                $array_otro = $other_class;
            } else {

                $array_otro = "";
            }

            if (isset($other_second_class)) {

                $array_otro_segundo = $other_second_class;
            } else {

                $array_otro_segundo = "";
            }



            suiche($action, $model, $model_id, $array_otro, $add_text,$array_otro_segundo,$in++);
        }



//"campo_valida"=>"estatus_proyecto_id", "value"=>array("3"), "other_actions"=>array('D')

        if (isset($validaciones)) {

            //si la validacion es normal
            if (count($validaciones) > 0) {

                foreach ($validaciones["value"] as $valida) {

                    $campo_valida = $validaciones["campo_valida"];

                    if ($model->$campo_valida == $valida) {
                        foreach ($validaciones["other_actions"] as $other) {

                            if (isset($other_class)) {

                                $array_otro = $other_class;
                            } else {

                                $array_otro = "";
                            }
                            suiche($other, $model, $model_id, $array_otro, $add_text, "", 0);
                            
                        }
                    }
                }
            }
        }
        ?>
                </td>


                    <?php
                }
                ?>
            </tr>
        <?php endforeach; ?>
        </tbody></table>
</div>
<script type="text/javascript">
    
    $(function() {
        $('#<?php echo $tbl_id ?>').dataTable({

            "bJQueryUI": true,
            "sPaginationType": "full_numbers",
            "oLanguage": {
             "sUrl": PUBLIC_PATH+"js/dataGrid/language/es_ES.txt"
            }
<?php
if (isset($records)) {
    ?>
                ,

                "iDisplayLength": <?php echo $records ?>,
                "bLengthChange":false
                //"iDisplayStart": 0 ,
                //"iDisplayEnd": 5


    <?php
}
?>



        });

    } );

</script>

